package ltd.tiantian.mall.service;

import ltd.tiantian.mall.controller.vo.TianTianMallCouponVO;
import ltd.tiantian.mall.controller.vo.TianTianMallMyCouponVO;
import ltd.tiantian.mall.controller.vo.TianTianMallShoppingCartItemVO;
import ltd.tiantian.mall.entity.TianTianMallCoupon;
import ltd.tiantian.mall.util.PageQueryUtil;
import ltd.tiantian.mall.util.PageResult;

import java.util.List;

public interface TianTianMallCouponService {

    PageResult getCouponPage(PageQueryUtil pageUtil);

    boolean saveCoupon(TianTianMallCoupon tianTianMallCoupon);

    boolean updateCoupon(TianTianMallCoupon tianTianMallCoupon);

    TianTianMallCoupon getCouponById(Long id);

    boolean deleteCouponById(Long id);

    /**
     * 查询可用优惠券
     *
     * @param userId
     * @return
     */
    List<TianTianMallCouponVO> selectAvailableCoupon(Long userId);

    /**
     * 用户领取优惠劵
     *
     * @param couponId 优惠劵ID
     * @param userId   用户ID
     * @return boolean
     */
    boolean saveCouponUser(Long couponId, Long userId);

    /**
     * 查询我的优惠券
     *
     * @param userId 用户ID
     * @return
     */
    PageResult<TianTianMallCouponVO> selectMyCoupons(PageQueryUtil pageQueryUtil);

    /**
     * 查询当前订单可用的优惠券
     *
     * @param myShoppingCartItems
     * @param priceTotal
     * @param userId
     * @return
     */
    List<TianTianMallMyCouponVO> selectOrderCanUseCoupons(List<TianTianMallShoppingCartItemVO> myShoppingCartItems, int priceTotal, Long userId);

    /**
     * 删除用户优惠券
     *
     * @param couponUserId
     * @return
     */
    boolean deleteCouponUser(Long couponUserId);

    /**
     * 回复未支付的优惠券
     * @param orderId
     */
    void releaseCoupon(Long orderId);

    /**
     * 查询所有优惠券
     * @return
     */
    List<TianTianMallCouponVO> selectAllCoupons();
}
